package cn.sxt.common.util;

import java.io.IOException;
import java.util.Arrays;
import java.util.Iterator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

public class YxlSpiderUtil {
	/**
	 * 目前返回的数据类型为
	 * {"code":"0","info":"","itemsList":{[都是每个info信息],[]}}
	 * @param column
	 * @param page
	 * @return
	 */
		public JSONObject itemsList(String column,int page){
			ConstatFinalUtil.LOGGER.info("---itemsList---");
			JSONObject resultJSON=new JSONObject();
			String url="http://www.xinli001.com/ceshi/"+column+"?page="+page;
			try {
				/*请求服务器*/
				Connection connection=Jsoup.connect(url);
				/*首先用connection获得所有的数据*/
				Document doucument=connection.timeout(5000).get();
				/*获得列表项目*/
				Elements listShowEles=doucument.getElementsByClass("list_show");
				/*获得列表项的第一个元素*/
				Element listShowEle=listShowEles.get(0);
				Elements fixedEles=listShowEle.getElementsByClass("fixed");
				ConstatFinalUtil.LOGGER.info("获得元素的大小：{}",fixedEles.size());
				/*数据*/
				JSONArray itemsArr=new JSONArray();
				for (Iterator iterator = fixedEles.iterator(); iterator.hasNext();) {
					Element fixedEle=(Element)iterator.next();
					JSONObject itemsJSON=new JSONObject();
					/*属性值必须填写完整*/
					/*取名称，class=linfo*/
					Element linfoEle=fixedEle.getElementsByClass("linfo").get(0);
					/*取到A链接*/
					Element aEle=linfoEle.getElementsByTag("a").get(0);
					/*取到开始标签和结束标签中的内容*/
					String href=aEle.attr("href");
					String id=href.substring(href.lastIndexOf("/")+1,href.length());
					/*JSONObject*/
					/*首先找到title*/
					/*调用测试项详情的页面，或有有用的信息，包括人数，内容，在这里传入id*/
					JSONObject itemInfoResJSON=this.itemInfo(href,id);
					if("0".equalsIgnoreCase(itemInfoResJSON.getString("code"))){
						/*查询数据*/
						itemsJSON=itemInfoResJSON.getJSONObject("data");
					}
					/*将获得的数据全部保存起来*/
					itemsArr.add(itemsJSON);
				}
				JSONObject dataJSON=new JSONObject();
				dataJSON.put("itemsList", itemsArr);
				/*总页数*/
				Elements pageAEles=doucument.getElementById("pages").getElementsByTag("a");
				Element totalPage=pageAEles.get(pageAEles.size()-2);
				/*获得总页数*/
				dataJSON.put("totalPage", totalPage.text());
				/*存储JSON返回的数据*/
				resultJSON.put("code", "0");
				resultJSON.put("info", "成功");
				resultJSON.put("data", dataJSON);
			} catch (Exception e) {
				ConstatFinalUtil.LOGGER.error("请求测试壹心理的数据出错了url:{}",url,e);
				resultJSON.put("code", "1");
				resultJSON.put("info", "报错了");
			}
			return resultJSON;
		}
	
	/**
	 * 我们需要的JSON类型是
	 * {"code":"0","info":"","data":{"testNum":"",}}
	 * 这里用来返回itemsInfo的信息
	 * 将json数据填写进去
	 * @param url
	 * @return
	 */
	public JSONObject itemInfo(String url,String id){
		ConstatFinalUtil.LOGGER.info("---itemInfo---");
		JSONObject resultJSON=new JSONObject();
		try {
			/*请求服务器*/
			Connection connection=Jsoup.connect(url);
			/*链接，获取Document对象*/
			Document document=connection.get();
			/*获取列表项目的元素*/
			Elements tinfoEles=document.getElementsByClass("tinfo fl");
			Element tinfoEle=tinfoEles.get(0);
			/*获取的第一个元素*/
			Elements h2Eles= tinfoEle.getElementsByTag("h2");
			Element h2Ele=h2Eles.get(0);
			String name=h2Ele.text();
			/*获取标签之外的文档*/
			String str=tinfoEle.text();
			/*将获得的数据一一赋值*/
			/*这里的代码变化比较多，不知道怎么办*/
			String testedNum=str.substring(0,str.indexOf("人"));
			String favNum1=str.substring(str.lastIndexOf("过"),str.indexOf("次"));
			String favNum=favNum1.replaceAll("\\D+", "");
			System.out.println(favNum + "---->" + str + "---->" + Arrays.toString(favNum1.getBytes("ISO8859-1")));
			/*以上是对字符串进行截取*/
			Element spanEle=tinfoEle.getElementsByClass("fgreen fb").get(0);
			String questionNum=spanEle.text();
			/*获取a标签*/
			Element aEle=tinfoEle.getElementsByTag("a").get(0);
			String suggNumText=aEle.text();
			String suggNum=suggNumText.substring(0,suggNumText.indexOf("条"));
			/*将数字获取到*/
			Element divEles=document.getElementsByClass("tshow bor_top").get(0);
			Elements imgEles=divEles.getElementsByTag("img");
			String imgPath=imgEles.get(0).attr("src");
			Elements pEles=divEles.getElementsByTag("p");
			String content=pEles.get(1).text();
			JSONObject dataJSON=new JSONObject();
			dataJSON.put("id", id);
			dataJSON.put("name",name);
			dataJSON.put("testedNum",testedNum );
			dataJSON.put("favNum", favNum);
			/*dataJSON.put("pubTime", pubTime);还是将发布时间修改为好*/
			dataJSON.put("questionNum", questionNum);
			dataJSON.put("suggNum", suggNum);
			dataJSON.put("imgPath", imgPath);
			dataJSON.put("content", content);
			/*将三个时间修改为当前时间*/
			resultJSON.put("code", "0");
			resultJSON.put("info", "成功");
			resultJSON.put("data", dataJSON);
		} catch (IOException e) {
			ConstatFinalUtil.LOGGER.error("请求yxl(itemsInfo)测试项详情报错了{}",url,e);
		}
		return resultJSON;
	}
	
}
